package com.example.booksactivity.Utils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.charset.Charset;

public class ProcessText {

    public long pages;//总页数
    public final int SIZE = 3000;//每一页的字节数 字节数固定
    public long bytescount;//字节总数
    public long currentpage;//当前页面
    public RandomAccessFile readFile;


    //构造方法 传入当前页 为了实现书签的功能 记录用户读取的文章位置
    public ProcessText(File file,long currentpage) {
        try {
            readFile=new RandomAccessFile(file,"r");
            bytescount=readFile.length();//获取字节总数
            pages=bytescount/SIZE+1;//计算得出文本的页数
            this.currentpage=currentpage;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void seek(long page){
        try {
            readFile.seek(page*SIZE);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //固定读取 SIZE+8个字节的内容 为什么+8？

    //读取的为字节 需要进行转码 转码不可能刚好转的就是文本内容，

    //一页的末尾 和开始出有可能乱码 每一次多读30个字节 是为了第一页乱码位置

    //在第二页就可以正常显示出内容 不影响阅读

    private String read(){
        //内容重叠防止 末尾字节乱码
        byte[] buffer=new byte[SIZE+8];

        try {
            readFile.read(buffer);
        } catch (IOException e) {
            e.printStackTrace();
        }
        String str=new String(buffer, Charset.forName("utf-8"));
        str=str.replace("�","");
        return str;
    }
    public String getPre(){
        String content="";
        if (currentpage<=1) {
            seek(0);
            content = read();
            currentpage = 1;
        }else {
            seek(currentpage-2);
            content=read();
            currentpage--;
        }
        return content;

    }

    public String getNext(){
        String content="";
        if (currentpage>=pages) {
            seek(pages - 1);
            content = read();
            currentpage=pages;
        }else {
            seek(currentpage);
            content=read();
            currentpage++;
        }
        return content;
    }
}
